/**
 * @file yzhTeacher.js
 * @description 教师管理API请求 - 使用yzh前缀的表格
 * @created 2024-07-15
 */

import request from '@/utils/request'
import axios from 'axios'

// 基础URL
const BASE_URL = '/api/admin'

/**
 * 获取教师列表
 * @param {Object} params - 查询参数
 * @param {number} [params.limit=1000] - 返回记录数量限制
 * @param {number} [params.page=1] - 页码
 * @param {string} [params.search] - 搜索关键词
 * @returns {Promise} 教师列表
 */
export function getTeacherList(params = { limit: 1000 }) {
  return request({
    url: `${BASE_URL}/yzh_teachers/list/`,
    method: 'get',
    params
  })
}

/**
 * 获取学院列表
 * @returns {Promise} 学院列表数据
 */
export const getColleges = () => {
  return request.get('/api/admin/colleges/list/') // 这个路径获取的是 yzh_colleges
    .catch(error => {
      console.error('获取学院列表 (yzh_colleges) 失败:', error)
      throw error
  })
}

/**
 * 获取系部列表
 * @param {number} collegeId - 学院ID
 * @returns {Promise} 系部列表数据
 */
export const getDepartments = (collegeId) => {
  return request.get(`/api/admin/colleges/${collegeId}/departments/`) // 这个路径获取的是 yzh_departments
    .catch(error => {
      console.error(`获取学院 (ID: ${collegeId}) 的系部列表 (yzh_departments) 失败:`, error)
      throw error
  })
}

/**
 * 获取教师详情
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 教师详情数据
 */
export function getTeacherDetail(teacherId) {
  return request({
    url: `${BASE_URL}/yzh_teachers/${teacherId}/`,
    method: 'get'
  })
}

/**
 * 添加教师
 * @param {Object} data - 教师信息
 * @returns {Promise} 添加结果
 */
export function addTeacher(data) {
  return request({
    url: `${BASE_URL}/yzh_teachers/add/`,
    method: 'post',
    data
  })
}

/**
 * 更新教师信息
 * @param {string} teacherId - 教师ID
 * @param {Object} data - 教师信息
 * @returns {Promise} 更新结果
 */
export function updateTeacher(teacherId, data) {
  return request({
    url: `${BASE_URL}/yzh_teachers/update/${teacherId}/`,
    method: 'put',
    data
  })
}

/**
 * 删除教师
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 删除结果
 */
export function deleteTeacher(teacherId) {
  return request({
    url: `${BASE_URL}/yzh_teachers/delete/${teacherId}/`,
    method: 'delete'
  })
}

/**
 * 获取教师课程列表
 * @param {string} teacherId - 教师ID
 * @returns {Promise} 教师课程列表
 */
export const getTeacherCourses = (teacherId) => {
  // return request.get(`/api/admin/teachers/${teacherId}/courses/`); // 旧路径
  return request.get(`/api/admin/yzh_teachers/${teacherId}/courses/`); // 新路径，匹配后端 yzh_teachers
};

/**
 * 获取教师特定课程的班级列表
 * @param {string} teacherId - 教师ID
 * @param {string} courseId - 课程ID
 * @returns {Promise} 班级列表
 */
export function getTeacherCourseClasses(teacherId, courseId) {
  return request({
    url: `${BASE_URL}/teachers/${teacherId}/courses/${courseId}/classes/`,
    method: 'get'
  })
}

/**
 * 获取教师课程班级的学生成绩
 * @param {string} teacherId - 教师ID
 * @param {string} courseId - 课程ID  
 * @param {string} classId - 班级ID
 * @returns {Promise} 学生成绩列表
 */
export function getClassStudentScores(teacherId, courseId, classId) {
  return request({
    url: `${BASE_URL}/teachers/${teacherId}/courses/${courseId}/classes/${classId}/students/`,
    method: 'get'
  })
}

// 获取单个学院详情 (yzh_colleges) - 新增
export const getYzhCollegeDetail = (collegeId) => {
  return request.get(`/api/admin/yzh_colleges/${collegeId}/detail/`) // 假设的后端路径
    .catch(error => {
      console.error(`获取单个学院详情 (ID: ${collegeId}, yzh_colleges) 失败:`, error)
      throw error
    })
}

// 获取学院下的班级列表 (yzh_classes) - 新增
export const getYzhCollegeClasses = (collegeId) => {
  return request.get(`/api/admin/yzh_colleges/${collegeId}/classes/`) // 假设的后端路径
    .catch(error => {
      console.error(`获取学院 (ID: ${collegeId}) 的班级列表 (yzh_classes) 失败:`, error)
      throw error
    })
}

// 获取单个班级详情 (yzh_classes)
export const getYzhClassDetail = (classId) => {
  return request.get(`/api/admin/yzh_classes/${classId}/detail/`)
    .catch(error => {
      console.error(`获取单个班级详情 (ID: ${classId}, yzh_classes) 失败:`, error)
      throw error
    })
}

// 获取班级下的学生列表 (yzh_students via yzh_student_class)
export const getYzhClassStudents = (classId) => {
  return request.get(`/api/admin/yzh_classes/${classId}/students/`)
    .catch(error => {
      console.error(`获取班级学生列表 (班级ID: ${classId}) 失败:`, error)
      throw error
  })
}

/**
 * 获取班级列表
 * @param {Object} params - 查询参数
 * @param {number} [params.limit] - 返回记录数量限制
 * @param {number} [params.offset] - 开始位置偏移量
 * @param {string} [params.search] - 搜索关键词
 * @param {number} [params.college_id] - 按学院ID筛选
 * @param {number} [params.grade_id] - 按年级ID筛选
 * @returns {Promise} 班级列表
 */
export const getYzhClassList = (params = {}) => {
  return request.get('/api/admin/yzh_classes/list/', { params })
    .catch(error => {
      console.error('获取班级列表失败:', error)
      throw error
  })
}

/**
 * 添加班级
 * @param {Object} data - 班级信息
 * @param {string} data.name - 班级名称
 * @param {number} data.grade_id - 年级ID
 * @param {string} data.grade_name - 年级名称
 * @param {number} data.college_id - 学院ID
 * @param {number} [data.department_id] - 系部ID
 * @param {number} [data.teacher_id] - 班主任ID
 * @returns {Promise} 添加结果
 */
export const addYzhClass = (data) => {
  return request.post('/api/admin/yzh_classes/add/', data)
    .catch(error => {
      console.error('添加班级失败:', error)
      throw error
    })
}

/**
 * 更新班级信息
 * @param {number} classId - 班级ID
 * @param {Object} data - 班级信息
 * @returns {Promise} 更新结果
 */
export const updateYzhClass = (classId, data) => {
  return request.put(`/api/admin/yzh_classes/update/${classId}/`, data)
    .catch(error => {
      console.error(`更新班级 (ID: ${classId}) 失败:`, error)
      throw error
    })
}

/**
 * 删除班级
 * @param {number} classId - 班级ID
 * @returns {Promise} 删除结果
 */
export const deleteYzhClass = (classId) => {
  return request.delete(`/api/admin/yzh_classes/delete/${classId}/`)
    .catch(error => {
      console.error(`删除班级 (ID: ${classId}) 失败:`, error)
      throw error
    })
}

/**
 * 添加学生
 * @param {Object} data - 学生信息
 * @param {string} data.student_code - 学生学号
 * @param {string} data.name - 学生姓名
 * @param {string} data.gender - 学生性别
 * @param {number} data.class_id - 班级ID
 * @param {string} [data.enrollment_date] - 入学日期
 * @returns {Promise} 添加结果
 */
export const addStudent = (data) => {
  return request.post('/api/admin/yzh_students/add/', data)
    .catch(error => {
      console.error('添加学生失败:', error)
      throw error
  })
}

/**
 * 更新学生信息
 * @param {number} studentId - 学生ID
 * @param {Object} data - 学生信息
 * @param {string} data.student_code - 学生学号
 * @param {string} data.name - 学生姓名
 * @param {string} [data.gender] - 学生性别
 * @param {number} [data.class_id] - 班级ID
 * @param {string} [data.enrollment_date] - 入学日期
 * @returns {Promise} 更新结果
 */
export const updateStudent = (studentId, data) => {
  return request.put(`/api/admin/yzh_students/update/${studentId}/`, data)
    .catch(error => {
      console.error(`更新学生 (ID: ${studentId}) 失败:`, error)
      throw error
  })
}

/**
 * 删除学生
 * @param {number} studentId - 学生ID
 * @returns {Promise} 删除结果
 */
export const deleteStudent = (studentId) => {
  return request.delete(`/api/admin/yzh_students/delete/${studentId}/`)
    .catch(error => {
      console.error(`删除学生 (ID: ${studentId}) 失败:`, error)
      throw error
    })
}

/**
 * 获取学生详情
 * @param {number} studentId - 学生ID
 * @returns {Promise} 学生详情
 */
export const getStudentDetail = (studentId) => {
  return request.get(`/api/admin/yzh_students/${studentId}/`)
    .catch(error => {
      console.error(`获取学生详情 (ID: ${studentId}) 失败:`, error)
      throw error
  })
} 